package org.study.shell;

import java.util.ArrayList;
import java.util.List;

public class ShellUser {
    /**
     * 如果存在用户则跳过，否则添加用户
     *
     * @param user  用户名称
     * @param group 用户组
     */
    public static List<String> addUser(String user, String group, String password) {
        List<String> commands = new ArrayList<String>();
        commands.add("username=" + user);
        commands.add("group_name=" + group);
        commands.add("if id -u  $username >/dev/null 2>&1; then");
        commands.add("   echo \"$username，用户存在跳过添加\"");
        commands.add("else");
        commands.add("   #创建一个用户，其中-d和-m选项用来为登录名在/home目录下创建一个目录");
        commands.add("   #-s 登录shell是， -g 用户主用户组");
        commands.add("   sudo useradd -g $group_name  $username");
        commands.add("   if [ $? -eq 0 ]; then");
        commands.add("     echo \"用户 $username 创建成功。\"");
        commands.add("   else");
        commands.add("     echo \"错误：创建用户 $username 失败。\" ");
        commands.add("     exit 1");
        commands.add("   fi");
        if (password != null && password.length() > 1) {
            commands.add("   password=" + password);
            commands.add("   echo \"$username:$password\" | chpasswd ");
            commands.add("   if [ $? -eq 0 ]; then");
            commands.add("     echo \"用户 $username 的密码设置成功。\"");
            commands.add("   else");
            commands.add("     echo \"错误：设置用户 $username 的密码失败。\" ");
            commands.add("     exit 1");
            commands.add("   fi");
        }
        commands.add("fi");
        return commands;
    }

    /**
     * 仅删除用户账户‌（保留主目录）
     * 1. 仅删除 /etc/passwd、/etc/shadow、/etc/group 中的用户记录
     * 2. 用户主目录（如 /home/用户名）和邮件池（/var/mail/用户名）会保留
     */
    public static List<String> deleteUser(String user) {
        return deleteUserBase(user, "sudo userdel " + user);
    }

    /**
     * 彻底删除用户及关联资源
     * 1. 递归删除用户主目录和邮件池
     * 2. -r 选项会移除 /home/用户名 和 /var/mail/用户名
     */
    public static List<String> deleteUserR(String user) {
        return deleteUserBase(user, "sudo userdel -r " + user);
    }

    /**
     * 强制删除活跃用户‌（紧急场景）
     * 1. 强制终止用户会话并删除账户（可能导致未保存数据丢失）
     * 2. 生产环境慎用
     */
    public static List<String> deleteUserF(String user) {
        return deleteUserBase(user, "sudo userdel -f " + user);
    }

    private static List<String> deleteUserBase(String user, String line) {
        List<String> commands = new ArrayList<String>();
        commands.add("if id -u " + user + " >/dev/null 2>&1; then");
        commands.add("   #终止用户进程");
        commands.add("   sudo pkill -u " + user);
        commands.add("   " + line);
        commands.add("   echo \"" + user + "，用户删除成功！\"");
        commands.add("else");
        commands.add("   echo \"" + user + "，已被删除!\"");
        commands.add("fi");
        commands.add("id " + user);
        return commands;
    }


    /**
     * 用户添加root的sudo全系
     *
     * @param user 用户名
     */
    public static List<String> addWheel(String user) {
        List<String> commands = new ArrayList<String>();
        commands.add("if id -u " + user + " >/dev/null 2>&1; then");
        commands.add("   echo \"" + user + "，用户存在跳过添加\"");
        commands.add("else");
        commands.add("   sudo useradd -aG Wheel  -s /bin/shell " + user);
        commands.add("   echo \"" + user + "，用户创建成功!\"");
        commands.add("fi");
        return commands;
    }

    /**
     * 添加用户组，如果存在则跳过
     *
     * @param group 用户组名称
     */
    public static List<String> addGroup(String group) {
        List<String> commands = new ArrayList<String>();
        commands.add("if getent group " + group + ">/dev/null; then");
        commands.add("   echo \"" + group + "，用户组存在跳过添加\"");
        commands.add("else");
        commands.add("   sudo groupadd  " + group);
        commands.add("   echo \"" + group + "，用户组创建成功!\"");
        commands.add("fi");
        return commands;
    }

    /**
     * 配置sudo权限
     *
     * @param user 用户名
     */
    public static String userAddSudo(String user) {
        return "echo \"" + user + " ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers";
    }

    /**
     * 创建指定用户的秘钥
     *
     * @param user 用户名
     */
    public static List<String> ssh(String user) {
        List<String> commands = new ArrayList<>();
        commands.add("echo \"=== 配置SSH无密码登录 ===\"");
        commands.add("su - " + user + "<< EOF");
        commands.add("echo \"创建SSH密钥\"");
        commands.add("ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa");
        return commands;
    }

    /**
     * 发送公钥钥到对应节点
     *
     * @param password 节点的密码
     * @param hostname 节点的名称或是ip地址
     */
    public static List<String> sendSSH(String password, String hostname) {
        List<String> commands = new ArrayList<>();
        commands.add("echo \"将本机的公钥发送到对应节点\"");
        commands.add("ssh-keyscan -H \\$slave >> ~/.ssh/known_hosts");
        commands.add("sshpass -p \"" + password + "\" ssh-copy-id -o StrictHostKeyChecking=no " + hostname);
        return commands;
    }
}
